package com.service;

import com.dao.GoodsDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class GoodsService {
    @Autowired
    private GoodsDao goodsDao;

    /**
     * 购买商品【没有使用事务】
     * @param user_id
     * @param goods_id
     * @param num
     */
    public void buyGoods(int user_id, int goods_id, int num){
        //查询到商品价格
        Float good_price = goodsDao.queryPriceById(goods_id);
        // 购买商品减去余额
        goodsDao.updateBalance(user_id,good_price * num);
        ///老 韩 : 模拟一个异常，会发生数据库数据不一致现象
        int i = 10 / 0;
        // 更新库存
        goodsDao.updateAmount(goods_id,num);
    }

    /**
     * 购买商品【使用事务】
     * @param user_id 用户id
     * @param goods_id 商品id
     * @param num 购买数量
     */
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void buyGoodsByTx(int user_id,int goods_id,int num){
        //查询到商品价格
        Float goods_price = goodsDao.queryPriceById(goods_id);
        // 购买商品减去余额
        goodsDao.updateBalance(user_id,goods_price * num);
        // 模拟一个异常，回答升数据库数据不一致现象
        //int i = 10 / 0;
        // 更新库存
        goodsDao.updateAmount(goods_id,num);
    }

    /**
     * 购买商品【使用事务】
     * 默认事务传播属性：REQUIRED
     * @param user_id
     * @param goods_id
     * @param num
     */
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void buyGoodsByTx02(int user_id,int goods_id,int num){
        //查询到商品价格
        Float goods_price = goodsDao.queryPriceById02(goods_id);
        // 购买商品减去余额
        goodsDao.updateBalance02(user_id,goods_price * num);
        // 更新库存
        goodsDao.updateAmount02(goods_id,num);
    }
}
